﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using MedicinskiUslugi.Reporti;

namespace MedicinskiUslugi {

	public partial class frmVnesVoSpecifikacijaRacno : Form {
		public string MainConnection;
		public int SpecifikacijaHeader_Id;

		public frmVnesVoSpecifikacijaRacno() {
			InitializeComponent();
			groupгglava.Enabled = false;
			groupStavki.Enabled = false;
			GroupVnesNaStavki.Enabled = false;
			groupNext.Enabled = false;
			glavaVnes.Enabled = false;
			btnPecatiFaktura.Enabled = false;
			btnPecatiSpecifikacija.Enabled = false;
		}

		faktura PecatiFakturaDS = new faktura();
		specifikacija PecatiSpecifikacijaDs = new specifikacija();

		SqlConnection con = new SqlConnection();
		SqlCommand com = new SqlCommand();

		private void sredi_Dolzina() {
			foreach ( Control control in groupNext.Controls ) {
				if ( control is TxtNumeric.TxtNum ) {
					for ( int i = 0; i < medicinskiUslugiDataSet.tblSpecifikacijaExport.Columns.Count; i++ ) {
						if ( ( ( TxtNumeric.TxtNum )control ).Name.ToUpper().StartsWith( medicinskiUslugiDataSet.tblSpecifikacijaExport.Columns[i].ColumnName.ToUpper() ) ) {
							string ColName = this.medicinskiUslugiDataSet.tblSpecifikacijaExport.Columns[i].ColumnName;
							string sql = @"select
											isNull(CHARACTER_MAXIMUM_LENGTH,0) + isNull(NUMERIC_PRECISION,0) as Dolzina
											from INFORMATION_SCHEMA.COLUMNS
											where TABLE_NAME='" + medicinskiUslugiDataSet.tblSpecifikacijaExport.TableName + "' and COLUMN_NAME ='" + ColName + "'";

							try {
								con.ConnectionString = this.MainConnection;
								com.Connection = con;
								com.Connection.Open();

								com.CommandText = sql;
								com.CommandType = CommandType.Text;
								( ( TxtNumeric.TxtNum )control ).MaxLength = int.Parse( com.ExecuteScalar().ToString() );
								com.Connection.Close();
							}
							catch ( Exception ex ) {
								MessageBox.Show( ex.ToString() );
							}
						}
					}
				}
			}
		}

		private void frmVnesVoSpecifikacijaRacno_Load( object sender, EventArgs e ) {
			con.ConnectionString = this.MainConnection;
			com.Connection = con;
			// TODO: This line of code loads data into the 'medicinskiUslugiDataSet.tblEEdinica' table. You can move, or remove it, as needed.
			this.tblEEdinicaTableAdapter.Fill( this.medicinskiUslugiDataSet.tblEEdinica );
			foreach ( DataRow ComboItem in this.medicinskiUslugiDataSet.tblEEdinica.DefaultView.ToTable( true, "Dejnost" ).Rows ) {
				sifraNaDejnostTxtNum.Items.Add( ComboItem["Dejnost"].ToString() );
			}

			sredi_Dolzina();
			this.tblSpecifikacijaExportDataGridView.DataSource = tblSpecifikacijaExportBindingSource;
			this.datumDateTimePicker.Value = DateTime.Now;
			this.datumNaUpatDateTimePicker.Value = DateTime.Now;
			this.datumNaZapocnuvanjeDateTimePicker.Value = DateTime.Now;
			this.datumNaZavrsuvanjeDateTimePicker.Value = DateTime.Now;

			this.btnNovaSpecifikacija.Focus();
		}

		private void btnNovaSpecifikacija_Click( object sender, EventArgs e ) {
			groupгglava.Enabled = true;
			glavaVnes.Enabled = true;
			GroupVnesNaStavki.Enabled = false;
			this.bindingNavigatorAddNewItem.PerformClick();
			this.datumDateTimePicker.Value = DateTime.Now;
			this.mesecTxtNum.Text = DateTime.Now.Month.ToString();
			this.godinaTxtNum.Text = DateTime.Now.Year.ToString();
			this.tblZaglavjeFirma_IdTxtNum.Text = "1";

			con.Open();
			com.Parameters.Clear();
			com.CommandText = "select dbo.GetNextNumber() as MaxBroj";
			brojNaSpecifikacijaTxtNum.Text = com.ExecuteScalar().ToString();
			con.Close();
			this.tblSpecifikacijaExportTableAdapter.Fill( this.medicinskiUslugiDataSet.tblSpecifikacijaExport, 0.ToString() );
		}

		private void tblZaglavjeFirma_IdTxtNum_TextChanged( object sender, EventArgs e ) {
			if ( !tblZaglavjeFirma_IdTxtNum.IsTextEmpty() ) {
				this.tblZaglavjeFirmaTableAdapter.Fill( this.medicinskiUslugiDataSet.tblZaglavjeFirma );
				this.tblZaglavjeFirmaBindingSource.Filter = " Id= " + tblZaglavjeFirma_IdTxtNum.Text;
			} else {
				if ( OtvoriSpecifikacija.ret2 != "" ) {
					this.tblZaglavjeFirmaTableAdapter.Fill( this.medicinskiUslugiDataSet.tblZaglavjeFirma );
					this.tblZaglavjeFirmaBindingSource.Filter = " Id= " + OtvoriSpecifikacija.ret2;
				}
			}
		}

		private void btnSnimiH_Click( object sender, EventArgs e ) {
			if ( sifraNaDejnostTxtNum.Text.Length > 1 ) {
				if ( !brojNaSpecifikacijaTxtNum.IsTextEmpty() && !tblZaglavjeFirma_IdTxtNum.IsTextEmpty() ) {
					this.Validate();
					this.tblSpecifikacijaHBindingSource.EndEdit();
					this.tableAdapterManager.UpdateAll( this.medicinskiUslugiDataSet );
					this.bindingNavigatorMoveLastItem.PerformClick();
					SpecifikacijaHeader_Id = Int32.Parse( ( ( DataRowView )tblSpecifikacijaHBindingSource.Current )["Id"].ToString() );
					this.tblSpecifikacijaHBindingSource.Filter = " Id= " + SpecifikacijaHeader_Id;
					this.tblSpecifikacijaExportTableAdapter.Fill( this.medicinskiUslugiDataSet.tblSpecifikacijaExport, SpecifikacijaHeader_Id.ToString() );
					groupгglava.Enabled = false;
					groupStavki.Enabled = true;
					GroupVnesNaStavki.Enabled = true;
					glavaVnes.Enabled = false;
					OtvoriSpecifikacija.Text = SpecifikacijaHeader_Id.ToString();
					btnNovaStavka.Focus();
				} else {
					MessageBox.Show( "Mора да отворите или да внесете заглавје" );
				}
			} else {
				MessageBox.Show( "Mора да отворите или да внесете дејност" );
				sifraNaDejnostTxtNum.Focus();
			}
		}

		private void OtvoriSpecifikacija_DataRead() {
			this.tblSpecifikacijaHTableAdapter.Fill( this.medicinskiUslugiDataSet.tblSpecifikacijaH );
			SpecifikacijaHeader_Id = Int32.Parse( OtvoriSpecifikacija.ret1 );
			this.tblSpecifikacijaHBindingSource.Filter = " Id=" + SpecifikacijaHeader_Id;
			groupStavki.Enabled = true;
			this.tblSpecifikacijaExportTableAdapter.Fill( this.medicinskiUslugiDataSet.tblSpecifikacijaExport, OtvoriSpecifikacija.ret1 );
			this.tblSpecifikacijaExportDataGridView.DataSource = tblSpecifikacijaExportBindingSource;
		}

		private void btnNovaStavka_Click( object sender, EventArgs e ) {
			groupNext.Enabled = true;
			this.tblSpecifikacijaExportTableAdapter.Fill( this.medicinskiUslugiDataSet.tblSpecifikacijaExport, SpecifikacijaHeader_Id.ToString() );
			string maxId = "1";
			redenBrojTxtNum.Text = maxId;
			maxId = medicinskiUslugiDataSet.tblSpecifikacijaExport.Compute( "1 + max(RedenBroj)", "tblSpecifikacijaH_Id=" + this.SpecifikacijaHeader_Id.ToString() ).ToString();
			this.tblSpecifikacijaExportBindingSource.AddNew();
			if ( maxId == "" ) { redenBrojTxtNum.Text = "1"; } else { redenBrojTxtNum.Text = maxId; }
		}

		private void btnSocuvajEdit_Click( object sender, EventArgs e ) {
			this.Validate();
			this.tblSpecifikacijaExportBindingSource.EndEdit();
			this.tblSpecifikacijaExportTableAdapter.Update( this.medicinskiUslugiDataSet.tblSpecifikacijaExport );
		}

		private void ziroSmetkaTxtNum_Leave( object sender, EventArgs e ) {
			btnSnimiH.Focus();
		}

		private void frmVnesVoSpecifikacijaRacno_KeyDown( object sender, KeyEventArgs e ) {
			if ( e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return )
				this.SelectNextControl( this.GetContainerControl().ActiveControl, true, true, true, true );
		}

		public virtual bool validacija() {
			foreach ( Control control in groupNext.Controls ) {
				if ( control is System.Windows.Forms.TextBox ) {
					if ( control.BackColor == Color.Tomato || control.BackColor == Color.Red ) {
						control.Focus();
						return false;
					}
				}
			}

			return true;
		}

		private string SifraIDNAPaket( string SifraNaPaket ) {
			DataSet Sifrarnik = new DataSet();
			Sifrarnik.ReadXml( "SifrarnikPaketi.xml" );
			return Sifrarnik.Tables["tbl1"].Select( " Sifra LIKE '" + SifraNaPaket + "'" ).CopyToDataTable().Rows[0][2].ToString();
		}

		private bool insertFromDbf( DataTable tbl, string EEDinica ) {
			string sqlInsertStr = tblSpecifikacijaExportTableAdapter.Adapter.InsertCommand.CommandText;
			con = new SqlConnection( this.MainConnection );
			com = new SqlCommand( sqlInsertStr, con );

			string maxId = "1";
			redenBrojTxtNum.Text = maxId;
			maxId = medicinskiUslugiDataSet.tblSpecifikacijaExport.Compute( "1 + max(RedenBroj)", "tblSpecifikacijaH_Id=" + this.SpecifikacijaHeader_Id.ToString() ).ToString();
			if ( maxId.Length > 1 ) { redenBrojTxtNum.Text = "1"; } else { redenBrojTxtNum.Text = maxId; }
			int newRowNumber = 0;//int.Parse( maxId );

			foreach ( DataRow row in tbl.Rows ) {
				try {
					com.Parameters.Clear();
					con.Open();
					com.Parameters.AddWithValue( "@RedenBroj", newRowNumber++ );
					com.Parameters.AddWithValue( "@SifraNaPaket", row["MUS_OBS"] );
					com.Parameters.AddWithValue( "@NazivNaPaket", row["NAZ_OBS"] );
					com.Parameters.AddWithValue( "@Dijagnoza", row["DIJ_OBS"] );
					com.Parameters.AddWithValue( "@EMBG", row["MAT_OBS"] );
					com.Parameters.AddWithValue( "@NazivNaPacient", row["PAC_OBS"] );
					com.Parameters.AddWithValue( "@Faksimil", row["IZV_OBS"] );
					com.Parameters.AddWithValue( "@UpatBroj", row["UBR_OBS"] );
					com.Parameters.AddWithValue( "@DatumNaUpat", row["UDT_OBS"] );
					com.Parameters.AddWithValue( "@BrojNaPresmetka", row["SME_OBS"] );
					com.Parameters.AddWithValue( "@BrojNaZaverenPotvrda", row["ZPB_OBS"] );
					com.Parameters.AddWithValue( "@DatumNaZapocnuvanje", row["PDT_OBS"] );
					com.Parameters.AddWithValue( "@DatumNaZavrsuvanje", row["ODT_OBS"] );
					com.Parameters.AddWithValue( "@ReferentnaCena", row["CEN_OBS"] );
					com.Parameters.AddWithValue( "@PresmetanaParticipacija", row["PAR_OBS"] );
					com.Parameters.AddWithValue( "@PlatenIznos", int.Parse( row["CEN_OBS"].ToString() ) + int.Parse( row["PAR_OBS"].ToString() ) );
					com.Parameters.AddWithValue( "@OsnovNaOsloboduvanje", row["OSO_OBS"] );
					com.Parameters.AddWithValue( "@PaketKolicina", row["KOL_OBS"] );
					com.Parameters.AddWithValue( "@tblSpecifikacijaH_Id", SpecifikacijaHeader_Id );
					com.Parameters.AddWithValue( "@tblEEdinica_Id", int.Parse( EEDinica ) );
					com.Parameters.AddWithValue( "@EHIS", row["EHIS_OBS"] );
					if ( row["DRZ_OBS"].ToString().Equals( "000" ) || row["DRZ_OBS"].ToString().Equals( "0" ) ) {
						com.Parameters.AddWithValue( "@sifraDrzavaVoStranstvo", "" );
					} else {
						com.Parameters.AddWithValue( "@sifraDrzavaVoStranstvo", row["DRZ_OBS"].ToString() );
					}
					com.Parameters.AddWithValue( "@brojZdravstvenoOsiguruvanje", row["BRO_OBS"] );

					com.ExecuteNonQuery();
					con.Close();
				}
				catch ( Exception ex ) {
					MessageBox.Show( ex.Message.ToString() );
					return false;
				}
			}

			return true;
		}

		private void btnSocuvajVnesStavka_Click( object sender, EventArgs e ) {
			if ( validacija() ) {
				string sqlInsertStr = tblSpecifikacijaExportTableAdapter.Adapter.InsertCommand.CommandText;
				con = new SqlConnection( this.MainConnection );
				com = new SqlCommand( sqlInsertStr, con );

				try {
					con.Open();
					com.Parameters.Clear();
					com.Parameters.AddWithValue( "@RedenBroj", redenBrojTxtNum.Text );
					com.Parameters.AddWithValue( "@SifraNaPaket", sifraNaPaketTxtNum.Text );
					com.Parameters.AddWithValue( "@NazivNaPaket", nazivNaPaketTxtNum.Text );
					com.Parameters.AddWithValue( "@Dijagnoza", dijagnozaTxtNum.Text );
					com.Parameters.AddWithValue( "@EMBG", eMBGTxtNum.Text );
					com.Parameters.AddWithValue( "@NazivNaPacient", nazivNaPacientTxtNum.Text );
					com.Parameters.AddWithValue( "@Faksimil", faksimilTxtNum.Text );
					com.Parameters.AddWithValue( "@UpatBroj", upatBrojTxtNum.Text );
					com.Parameters.AddWithValue( "@BrojNaPresmetka", brojNaPresmetkaTxtNum.Text );
					com.Parameters.AddWithValue( "@DatumNaUpat", datumNaUpatDateTimePicker.Value );
					com.Parameters.AddWithValue( "@BrojNaZaverenPotvrda", brojNaZaverenPotvrdaTxtNum.Text );
					com.Parameters.AddWithValue( "@DatumNaZapocnuvanje", datumNaZapocnuvanjeDateTimePicker.Value );
					com.Parameters.AddWithValue( "@DatumNaZavrsuvanje", datumNaZavrsuvanjeDateTimePicker.Value );
					com.Parameters.AddWithValue( "@ReferentnaCena", referentnaCenaTxtNum.Text );
					com.Parameters.AddWithValue( "@PresmetanaParticipacija", presmetanaParticipacijaTxtNum.Text );
					com.Parameters.AddWithValue( "@PlatenIznos", platenIznosTxtNum.Text );
					com.Parameters.AddWithValue( "@OsnovNaOsloboduvanje", osnovNaOsloboduvanjeTxtNum.Text );
					com.Parameters.AddWithValue( "@PaketKolicina", paketKolicinaTxtNum.Text );
					com.Parameters.AddWithValue( "@tblSpecifikacijaH_Id", SpecifikacijaHeader_Id );
					com.Parameters.AddWithValue( "@EHIS", txtEhis.Text );
					com.Parameters.AddWithValue( "@sifraDrzavaVoStranstvo", "" ); // treba se sredi za drzava
					com.Parameters.AddWithValue( "@brojZdravstvenoOsiguruvanje", txtBrZdrOsig.Text );
					com.Parameters.AddWithValue( "@tblEEdinica_Id", int.Parse( nazivComboBox.SelectedValue.ToString() ) );

					com.ExecuteNonQuery();
					con.Close();
					btnNovaStavka.PerformClick();
					sifraNaPaketTxtNum.Focus();
				}
				catch ( Exception ex ) {
					MessageBox.Show( ex.Message.ToString() );
				}
			}
		}

		private void btnExit_Click( object sender, EventArgs e ) {
			this.Close();
		}

		public string konvertirajDatum( string datum ) {
			string datumKonvertiranString = "";
			DateTime dt = Convert.ToDateTime( datum );
			datumKonvertiranString = dt.Date.Year.ToString().PadLeft( 4, '0' ) + dt.Month.ToString().PadLeft( 2, '0' ) + dt.Day.ToString().PadLeft( 2, '0' );
			return datumKonvertiranString;
		}

		private void btnGenerirajXml_Click( object sender, EventArgs e ) {
			if ( GenerirajXmlZaSpecifikacija() ) {
				btnPecatiFaktura.Enabled = true;
				btnPecatiSpecifikacija.Enabled = true;
			} else {
				MessageBox.Show( "Неуспешно, Грешки во фалот" );
			}
		}

		private void btnGenerirajFakturaXml_Click( object sender, EventArgs e ) {
			if ( !groupгglava.Enabled && SpecifikacijaHeader_Id >= 1 ) {
				frmImportdbf import = new frmImportdbf();

				DataTable dt = new DataTable();
				import.ShowDialog();
				dt = import.dataFromDb;

				if ( import.vneseno == true ) {
					string sifraEE = "01";
					if ( dt.Rows.Count > 1 ) {
						try {
							con.Open();
							com.Parameters.Clear();
							com.CommandText = "Select top 1 Id from tblEEdinica Where Sifra=" + import.EEdinica;
							sifraEE = com.ExecuteScalar().ToString();
							con.Close();
						}
						catch ( Exception ex ) {
							MessageBox.Show( "Економската единица не е пронајдена продолжуваме со предефинирана" );
							sifraEE = "01";
							con.Close();
						}

						insertFromDbf( dt, sifraEE );
						this.tblSpecifikacijaExportTableAdapter.Fill( this.medicinskiUslugiDataSet.tblSpecifikacijaExport, SpecifikacijaHeader_Id.ToString() );
						this.tblSpecifikacijaExportDataGridView.DataSource = tblSpecifikacijaExportBindingSource;
					}
				}
				import.Dispose();
			}
		}

		private bool GenerirajXmlZaSpecifikacija() {
			con.Close();
			specifikacija DbSpecifikacija = new specifikacija();
			SaveFileDialog dlg = new SaveFileDialog();
			dlg.Title = "Одберете локција за снимање на фајлот";
			dlg.FileName = sifraNaUstanovTxtNum.Text + "_" + godinaTxtNum.Text + "_" + mesecTxtNum.Text + "_" + sifraNaDejnostTxtNum.Text + "_SP21.xml";
			string filePath = "";
			dlg.ShowDialog();
			filePath = dlg.FileName;

			if ( this.tblSpecifikacijaExportBindingSource.Count > 1 && filePath.Length > 1 ) {
				//Glava na Specifikacija

				DataRow RowGlava = DbSpecifikacija.glavaSpecifikacija.NewRow();
				RowGlava["EDB"] = eDBTxtNum.Text;
				RowGlava["dejnost"] = int.Parse( sifraNaDejnostTxtNum.Text );
				RowGlava["BrojSpecifikacija"] = brojNaSpecifikacijaTxtNum.Text.Trim();
				RowGlava["mesec"] = mesecTxtNum.Text;
				RowGlava["godina"] = godinaTxtNum.Text;
				RowGlava["datum"] = konvertirajDatum( datumDateTimePicker.Value.ToString() );
				RowGlava["podracnaSluzba"] = Int16.Parse( podracnaSluzbaTxtNum.Text );
				DbSpecifikacija.glavaSpecifikacija.Rows.Add( RowGlava );

				DataRow stavkaSpecifikacija = DbSpecifikacija.teloSpecifikacija.NewteloSpecifikacijaRow();
				DbSpecifikacija.teloSpecifikacija.Rows.Add( stavkaSpecifikacija );

				DataRow participacijaS = DbSpecifikacija.participacijaSpecifikacija.NewRow();
				DbSpecifikacija.participacijaSpecifikacija.Rows.Add( participacijaS );

				DataRow lekoviS = DbSpecifikacija.lekoviSpecifikacija.NewRow();
				DbSpecifikacija.lekoviSpecifikacija.Rows.Add( lekoviS );

				DataTable Presmetke = new DataTable();

				con.Open();
				com.Parameters.Clear();
				com.CommandText = @"select distinct BrojNaPresmetka,NazivNaPacient, UpatBroj,BrojNaZaverenPotvrda,Dijagnoza,DatumNaZapocnuvanje,DatumNaZavrsuvanje,Faksimil, DatumNaUpat , EMBG , tblSpecifikacijaH_Id,sifraDrzavaVoStranstvo,brojZdravstvenoOsiguruvanje,EHIS
									FROM [MedicinskiUslugi].[dbo].[tblSpecifikacijaExport]
									Where (BrojNaPresmetka is not null) and (EMBG is not null) and tblSpecifikacijaH_Id =  @spec_Id
									order by 1";
				com.Parameters.AddWithValue( "@spec_Id", SpecifikacijaHeader_Id );
				com.Connection = con;
				Presmetke.Load( com.ExecuteReader() );
				con.Close();

				foreach ( DataRow row in Presmetke.Rows ) {
					DataRow epizoda = DbSpecifikacija.epizoda.NewRow();
					epizoda["teloSpecifikacija_Id"] = stavkaSpecifikacija[0];
					epizoda["embg"] = row["EMBG"];
					epizoda["imePrezime"] = row["NazivNaPacient"].ToString().Trim( ' ' );
					epizoda["brojPresmetka"] = row["BrojNaPresmetka"].ToString().Trim();
					epizoda["brojUpat"] = row["UpatBroj"].ToString().Trim();
					epizoda["datumIzdavanjeUpat"] = konvertirajDatum( row["datumNaUpat"].ToString() );
					epizoda["sifraDijagnoza"] = row["Dijagnoza"].ToString().Trim();
					epizoda["datumPocetok"] = konvertirajDatum( row["DatumNaZapocnuvanje"].ToString() );
					epizoda["datumKraj"] = konvertirajDatum( row["DatumNaZavrsuvanje"].ToString() );
					epizoda["faksimil"] = row["Faksimil"].ToString();
					epizoda["datumRagjanje"] = gf.DatumNaRaganjeOdMaticen( row["EMBG"].ToString() );
					//
					epizoda["sifraDrzavaVoStranstvo"] = row["sifraDrzavaVoStranstvo"].ToString();
					epizoda["brojZdravstvenoOsiguruvanje"] = row["brojZdravstvenoOsiguruvanje"].ToString();
					epizoda["EHIS"] = row["EHIS"].ToString();
					//
					DataTable Presmetka_Paket = new DataTable();
					con.Open();
					com.Parameters.Clear();
					com.CommandText = @"set dateformat dmy; exec vratiPresmetka " + SpecifikacijaHeader_Id + " , '" + row["EMBG"].ToString() + "', '" + row["BrojNaPresmetka"] + "'";
					com.Connection = con;
					Presmetka_Paket.Load( com.ExecuteReader() );
					con.Close();
					DbSpecifikacija.epizoda.Rows.Add( epizoda );

					foreach ( DataRow paketi in Presmetka_Paket.Rows ) {
						DataRow paket = DbSpecifikacija.paket.NewRow();
						paket["epizoda_Id"] = epizoda["epizoda_Id"];
						paket["sifraPaket"] = SifraIDNAPaket( paketi["SifraNaPaket"].ToString().Trim() );
						paket["kolicina"] = paketi["PaketKolicina"];
						paket["referentnaCena"] = paketi["ReferentnaCena"];
						paket["brojZaverenaPotvrda"] = paketi["BrojNaZaverenPotvrda"].ToString().Trim();
						DbSpecifikacija.paket.Rows.Add( paket );

						DataRow participacija = DbSpecifikacija.participacija.NewRow();
						participacija["participacijaSpecifikacija_Id"] = participacijaS[0];
						participacija["embg"] = paketi["EMBG"];
						participacija["brojPresmetka"] = paketi["BrojNaPresmetka"].ToString().Trim();
						participacija["kodOsloboduvanje"] = paketi["OsnovNaOsloboduvanje"];
						participacija["presmetanaParticipacija"] = paketi["PresmetanaParticipacija"];
						participacija["vkupenIznos"] = paketi["PlatenIznos"];
						participacija["naplatenaParticipacija"] = Convert.ToDecimal( paketi["PlatenIznos"] ) - Convert.ToDecimal( paketi["PresmetanaParticipacija"] );
						DbSpecifikacija.participacija.Rows.Add( participacija );
					}
				}
			}
			PecatiSpecifikacijaDs = DbSpecifikacija;
			DbSpecifikacija.WriteXml( filePath, XmlWriteMode.IgnoreSchema );

			con.Open();
			com.Parameters.Clear();
			com.CommandText = @"set dateformat dmy; exec vratiFaktura " + SpecifikacijaHeader_Id;
			com.Connection = con;
			DataSet db = new DataSet();
			SqlDataAdapter da = new SqlDataAdapter( com );
			da.Fill( db );
			con.Close();

			if ( gf.ValidateXml( filePath, @"http://www.fzo.org.mk/WBStorage/Files/Specifikacija.xsd" ) ) {
				GenerirajXmlZaFatura( filePath.Replace( "SP21.xml", "FR20.xml" ), db );
				if ( gf.ValidateXml( filePath.Replace( "SP21.xml", "FR20.xml" ), @"http://www.fzo.org.mk/WBStorage/Files/Faktura.xsd" ) ) {
					if ( File.Exists( filePath.Replace( "SP21.xml", "FR20.xml" ) ) ) {
						return true;
					} else {
						return false;
					}
				} else {
					return false;
				}
			} else {
				return false;
			}
		}

		private void GenerirajXmlZaFatura( string filePath, DataSet db ) {
			faktura Dbfaktura = new faktura();

			if ( db.Tables.Count == 2 ) {
				//Glava na faktura
				DataRow RowGlava = Dbfaktura.glavaFaktura.NewRow();
				RowGlava["transakciskaSmetka"] = ziroSmetkaTxtNum.Text.Trim();
				RowGlava["banka"] = bankaDeponentTxtNum.Text.Trim();
				RowGlava["EDB"] = eDBTxtNum.Text.Trim();
				RowGlava["dejnost"] = sifraNaDejnostTxtNum.Text;
				RowGlava["BrojFaktura"] = brojNaSpecifikacijaTxtNum.Text.Trim();
				RowGlava["mesec"] = Int32.Parse( mesecTxtNum.Text );
				RowGlava["godina"] = Int32.Parse( godinaTxtNum.Text );
				RowGlava["datum"] = konvertirajDatum( datumDateTimePicker.Value.ToString() );
				RowGlava["datumValuta"] = konvertirajDatum( datumDateTimePicker.Value.AddDays( 15 ).ToString() );
				RowGlava["podracnaSluzba"] = podracnaSluzbaTxtNum.Text;
				decimal sumaIznos = Convert.ToDecimal( db.Tables[0].Compute( "Sum(vkupenIznosFzom)", "" ).ToString() );

				if ( !procentTxtNum.IsTextEmpty() ) {
					RowGlava["procent"] = procentTxtNum.Text;
					RowGlava["vkupenIznosSoProcent"] = ( sumaIznos / 100 ) * Convert.ToDecimal( procentTxtNum.Text ) + sumaIznos;
				} else {
					RowGlava["procent"] = 0;
					RowGlava["vkupenIznosSoProcent"] = sumaIznos;
				}

				foreach ( DataRow item in db.Tables[1].Rows ) {
					RowGlava["vkupenIznosPaketi"] = item["vkupenIznosPaketi"];
					RowGlava["presmetanaParticipacija"] = item["presmetanaParticipacija"];
					RowGlava["naplatenaParticipacija"] = item["naplatenaParticipacija"];
					RowGlava["vkupnoLekovi"] = Convert.ToDecimal( 0 ).ToString() + ",00";
					RowGlava["vkupenIznosFzom"] = item["vkupenIznosFzom"];
				}

				Dbfaktura.glavaFaktura.Rows.Add( RowGlava );
				DataRow teloFaktura = Dbfaktura.teloFaktura.NewRow();
				Dbfaktura.teloFaktura.Rows.Add( teloFaktura );
				foreach ( DataRow row in db.Tables[0].Rows ) {
					DataRow rowPaket = Dbfaktura.paket.NewRow();
					rowPaket["teloFaktura_Id"] = teloFaktura[0];
					rowPaket["sifraPaket"] = SifraIDNAPaket( row["sifraNaPaket"].ToString().Trim() );
					rowPaket["kolicina"] = row["kolicina"];
					rowPaket["referentnaCena"] = row["ReferentnaCena"];
					Dbfaktura.paket.Rows.Add( rowPaket );
				}
			}

			PecatiFakturaDS = Dbfaktura;
			Dbfaktura.WriteXml( filePath, XmlWriteMode.IgnoreSchema );
		}

		private void OtvoriSpecifikacija_Leave( object sender, EventArgs e ) {
			sifraNaDejnostTxtNum.Focus();
		}

		private void platenIznosTxtNum_TextChanged( object sender, EventArgs e ) {
			btnSocuvajVnesStavka.Focus();
		}

		private void sifraNaDejnostTxtNum_SelectedIndexChanged( object sender, EventArgs e ) {
			if ( sifraNaDejnostTxtNum.SelectedIndex != -1 ) {
				this.tblEEdinicaTableAdapter.FillBy( this.medicinskiUslugiDataSet.tblEEdinica, Convert.ToInt32( sifraNaDejnostTxtNum.Text ) );
			}
		}

		private void nazivComboBox_SelectedIndexChanged( object sender, EventArgs e ) {
			if ( nazivComboBox.SelectedIndex != -1 ) {
				sifraNaDejnostTxtNum.FindStringExact( ( ( DataRow )this.tblEEdinicaBindingSource.Current )["Dejnost"].ToString() );
			}
		}

		private void nazivNaPacientTxtNum_DataRead() {
			eMBGTxtNum.Text = nazivNaPacientTxtNum.ret2;
			dijagnozaTxtNum.Focus();
		}

		private void sifraNaPaketTxtNum_DataRead() {
			nazivNaPaketTxtNum.Text = sifraNaPaketTxtNum.ret2;
			referentnaCenaTxtNum.Text = sifraNaPaketTxtNum.ret3;
			brojNaPresmetkaTxtNum.Focus();
		}

		private void btnPecatiSpecifikacija_Click( object sender, EventArgs e ) {
			//Crystal Report Code
			frmPreview print = new frmPreview();
			izvSpecifikacija spec = new izvSpecifikacija();
			MedicinskiUslugiDataSetTableAdapters.PecatiSpecifikacijaTableAdapter ps = new MedicinskiUslugiDataSetTableAdapters.PecatiSpecifikacijaTableAdapter();
			ps.Fill( medicinskiUslugiDataSet.PecatiSpecifikacija, SpecifikacijaHeader_Id );
			tblSpecifikacijaHTableAdapter.FillBy( medicinskiUslugiDataSet.tblSpecifikacijaH, SpecifikacijaHeader_Id );

			spec.SetDataSource( medicinskiUslugiDataSet );
			print.ReportView.ReportSource = spec;
			print.Show();
			btnPecatiSpecifikacija.Enabled = false;
		}

		private void btnPecatiFaktura_Click( object sender, EventArgs e ) {
			//Crystal Report Code
			frmPreview print = new frmPreview();
			izvFaktura spec = new izvFaktura();
			MedicinskiUslugiDataSetTableAdapters.PecatiFakturaTableAdapter ps = new MedicinskiUslugiDataSetTableAdapters.PecatiFakturaTableAdapter();
			ps.Fill( medicinskiUslugiDataSet.PecatiFaktura, SpecifikacijaHeader_Id );
			tblSpecifikacijaHTableAdapter.FillBy( medicinskiUslugiDataSet.tblSpecifikacijaH, SpecifikacijaHeader_Id );

			spec.SetDataSource( medicinskiUslugiDataSet );
			print.ReportView.ReportSource = spec;
			print.Show();
			btnPecatiSpecifikacija.Enabled = false;

			btnPecatiFaktura.Enabled = false;
		}
	}
}